순환복잡도

순환복잡도 또는 CC(cyclomatic complexity)는 프로그램의 복잡도를 계산하는 지표로, 코드의 실행 경로(linearly independent paths)가 몇 개인지를 정량화한다. 가장 낮은 점수는 1점(분기가 하나도 없으면 경로가 1개이므로). Thomas J. McCabe가 1976년에 제안했다.1

순환복잡도가 낮으면 적은 수의 단위 테스트로도 테스트 커버리지(정확히는 분기 커버리지)를 높일 수 있게 된다.

CC를 낮추는 방법들

  • Conditionals to lookup table: 분기 대신 룩업 테이블 또는 사전을 쓰면 CC를 줄일 수 있다. 언어에서 지원하는 경우 패턴 매칭을 쓰면 좋겠으나 패턴 매칭을 쓴다고 CC가 낮아지지는 않는다.
  • Conditionals to polymorphism: 분기 대신 다형성을 쓰면 CC를 줄일 수 있다. 다만 이렇게 하는 게 언제나 코드의 이해가능성 내지 유지보수성 향상을 보장하지는 않는다.

CC와 이른 리턴(early return)

일반적인 오해와 달리 함수 앞부분에서 Guard clauses를 써도 CC에 영향을 주지는 않는다. CC는 인지복잡도와 달리 중첩된 분기에 대해 가중치를 부여하지 않기 때문이다.

대안

순환복잡도가 테스트가능성(testability)을 측정하기엔 좋지만 유지보수성(maintainability)을 측정하기엔 부족한 면이 있어서 이를 보완하기 위해 인지복잡도도라는 지표가 제안된 바 있다.

Footnotes

  1. A complexity measure

2024 © ak